home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
041-050
/
amok49
/
display.write_bug
/
liesmich
next >
Wrap
Text File
|
1993-11-04
|
2KB
|
57 lines
Ein Bug im OBERON-Modul Display
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oberon Compiler V1.17.1 03-Oct-90
Display.mod Date: 16-Jun-90
Die Prozedur Display.Write hat einen Fehler, der zu
wunderschönen GURUs führen kann.
Dies zeigt, wie nützlich die Beigabe der Quelltexte zu den
Moduln des Compilers ist: kleinere Fehler kann man schnell
selbst reparieren.
Das Programm "writebug" führt den Fehler vor:
Es importiert die Prozedur Write einmal aus dem Original-Modul
Display und einmal aus dem korrigierten Modul, das ich für
dieses Demo-Programm NDisplay genannt habe.
Zuerst wird NDisplay.Write einigemale ausgeführt, dann dasselbe
mit dem original Display.Write, und der Amiga stürzt ab!
Korrektur:
=========
Da das Modul Display nicht PD ist, kann wohl auch die
korrigierte Version nicht auf PD veröffentlicht werden.
Wer die Vollverion des Compilers gekauft hat, kann den
Fehler aber selbst beheben.
Die Prozedur Write befindet sich am Ende des Quelltextes.
Sie lautet auszugsweise, mit der eingefügten Korrektur:
IF len+d.curX>d.txtWidth THEN
IF d.curX=d.txtWidth THEN WriteLn(d);
(* eingefügt: *)
IF len<d.txtWidth THEN max:=len ELSE max:=d.txtWidth END;
(* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *)
ELSE
max := d.txtWidth-d.curX;
END;
END;
Nach der Änderung im Quelltext muß nur noch das Modul einmal mit
der Option -md und einmal ohne compiliert werden, und alles
funktioniert wieder.
Viel Spaß!
Franz Dimbeck
Troppauerstr. 48
D-8058 Erding
Tel.: 08122 18135